package FileDemo;

import java.io.File;
import java.io.FileFilter;

/**
 * 1）创建测试类FileTest2；
 * 2）在FileTest2类的main函数中封装父目录D:\\test的对象parent；
 * 3）调用递归扫描的函数scanFolders(parent);
 * 4）自定义函数scanFolders()，使用父目录对象parent调用listFiles(new FileFilter())函数获得父目录下所有儿子的File数组files;
 * 5）使用过滤器FileFilter接口的匿名内部类作为listFiles()函数的参数，匿名内部类实现accept函数；
 * 6在accept函数体中使用父目录的儿子对象调用isDirectory()函数和getName().endsWith(".jpg")函数来判断父目录 的儿子是否是文件夹或者后缀名是.jpg的文件；
 * 7）使用判断结构判断files数组是否有文件或者文件夹；
 * 8）如果有，则循环遍历数组files；
 * 9）使用file对象调用isDirectory()函数判断是否是文件夹；
 * 10）如果是文件夹，则递归调用scanFolders(file)函数;
 * 11）如果不是文件夹，肯定是文件，使用file对象调用getName()函数获得文件的全名，调用endsWith()函数判断后缀名是否是.jpg,如果是输出文件所属的绝对路径；
 */
public class FileTest2 {
    /**
     * 思路：
     * A：创建父目录的File对象
     * B：获取父目录下的符合条件的儿子
     * 条件是什么？
     * 可以是文件夹 也可以是.jpg文件
     * C：循环遍历，取出每个儿子
     * 取出的儿子有两种情况：文件夹、.jpg文件
     * D：判断是否是文件夹
     * 是：回到B
     * 否：打印
     * B到D封装成递归函数
     */
    public static void main(String[] args) {
        // 封装父目录的对象
        File parent = new File("./src/resources/abc");
        // 调用函数查找文件或者文件夹
        scanFolderAndFile(parent);
    }

    public static void scanFolderAndFile(File parent) {
        // 获取父目录下的符合条件的儿子 这里需要使用过滤器
        File[] files = parent.listFiles(new FileFilter() {
            public boolean accept(File pathname) {
                // 条件是文件夹或者后缀名是.jpg的文件
                return pathname.isDirectory() || pathname.getName().endsWith(".txt");
            }
        });
        //循环遍历，取出每个儿子
        for (File file : files) {
//			判断是否是文件夹
            if (file.isDirectory()) {
                //递归调用函数
                scanFolderAndFile(file);
            } else {
                System.out.println(file.getAbsolutePath());
            }
        }
    }
}
